声明property的语法为:

@property (参数1,参数2) 类型 名字;

如:

@property(nonatomic,retain) UIWindow *window;  

其中参数主要分为三类:

读写属性: (readwrite/readonly)

setter语意:(assign/retain/copy)

原子性: (atomicity/nonatomic)

各参数意义如下:

readwrite: 产生settergetter方法

readonly: 只产生简单的getter,没有setter。

assign: 默认类型,setter方法直接赋值,而不进行retain操作

retain: setter方法对参数进行release旧值,再retain新值。

copy: setter方法进行Copy操作,与retain一样

nonatomic: 禁止多线程,变量保护,提高性能

@property的参数:

(1)set 方法内存管理相关的参数

(a)retain:release 旧值,retain 新值(适用于 OC对象类型
(b)assign:直接赋值(默认,适用于非OC对象类型), 常用在 BOOL 、int 等基本数据类型。
(c)copy:release 旧值,copy新值, 常用在 NSString对象

(2)是否要生成 set 方法

(a)readwriter:同时生成set和get方法的声明和实现
(b)readonly:只生成 get的声明和实现

(3)多线程管理

(a)nonatomic:性能高(一般都是使用这个)
(b)atomic:性能低(默认)

(4)set 和 get 方法的名称

(a)setter:决定了 set 方法的名称,一定要加个冒号“:“
(b)getter:决定了 get 方法的名称,不要加冒号

(5)strong 和 weak

(a) strong: 用于一般对象
(b) weak: 用于UI控件

id万能指针

Person *p = [Person new];

相当于:

id p = [Person new];

注意 id 和 p 之间不要再加了,id 中默认就带了。

详情请参考博文Objective-C中的@property和@synthesize用法


Corwien
6.3k 声望1.6k 粉丝

为者常成,行者常至。